#include "ChequeadorDeInclusiones.h"
#include <iostream>

ChequeadorDeInclusiones::ChequeadorDeInclusiones(unsigned int cn)
{
  cantNodos = cn;
  chequeador = new bool[cantNodos];
  for (unsigned int i = 0; i < cantNodos; i++)
  {
    chequeador[i] = 0;
  }
}

ChequeadorDeInclusiones::~ChequeadorDeInclusiones()
{
  delete[] chequeador;
}

bool ChequeadorDeInclusiones::chequearInclusion(list<int>& prendedora,
  list<int>& corroboradora)
{
  bool resultado = (prendedora.size() == corroboradora.size());
  if (resultado)
  {
    cambiarEstado(prendedora);
    resultado = corroborar(corroboradora);
    cambiarEstado(prendedora);
  }
  return resultado;
}

bool ChequeadorDeInclusiones::chequearInclusiones(list<int>& prendedora,
  list< list<int> >& corroboradoras)
{
  cambiarEstado(prendedora);
  bool resultado = true;
  list< list<int> >::iterator it = corroboradoras.begin();
  while (resultado and it != corroboradoras.end())
  {
    bool resultado = (prendedora.size() == (*it).size());
    if (resultado)
    {
    	resultado = corroborar(*it);
    }
  	it++;
  }
  cambiarEstado(prendedora);
  return resultado;
}

void ChequeadorDeInclusiones::cambiarEstado(list<int>& l)
{
  cout << "Cambiando estado..." << endl;
  for(list<int>::iterator it = l.begin(); it != l.end(); it++)
  {
    cout << *it << endl;
    chequeador[*it] = not chequeador[*it];
  }
}

bool ChequeadorDeInclusiones::corroborar(list<int>& l)
{
  cout << "Corroborando..." << endl;
  bool resultado = true;
  list<int>::iterator it = l.begin();
  while (resultado and (it != l.end()))
  {
    cout << *it << endl;
  	resultado = chequeador[*it];
  	it++;
  }
  return resultado;
}
